package com.xy.biz.ts.domain.bo;

import com.xy.biz.ts.domain.resp.GetPracticeRecordResponse;
import lombok.*;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 *
 *
 * @author wwj
 * @date 2021-4-1
 */
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Data
public class TrainBO {

    /**
     * 培训Id
     */
    private Long trainId;
    /**
     * 外部key，例如activiti的流程Id
     */
    private String foreignKey;
    /**
     * 流程Id
     */
    private Long documentFlowId;
    /**
     * 培训名称
     */
    private String name;
    /**
     * 培训内容
     */
    private String content;
    /**
     * 培训方式：
     train_method_self_study-自学、
     train_method_practical_operation实操、
     train_method_explain-理论讲解(字典id)
     */
    private String mode;
    /**
     * 培训类型：
     train_type_common_train-普通培训，
     train_type_document_train-文档培训
     */
    private String type;
    /**
     * 考核方式
     assess_method_test_question-试题考核
     assess_method_practical_operation-实操考核
     */
    private String assess;
    /**
     * 培训分类
     train_year-年度培训
     train_common-普通培训
     */
    private String trainClassify;
    /**
     * 培训形式
     * train_inside-内部培训
     * train_outside-外部培训
     * train_external-外聘培训
     */
    private String trainForm;

    /**
     * 费用类别
     * expense_self-自费
     * expense_public-公费
     * expense_free-免费
     */
    private String expenseCategory;

    /**
     * 预估费用
     */
    private BigDecimal estimatedCost;

    /**
     * 申请人部门Id
     */
    private Long createUserGroupId;

    /**
     * 证书名称
     */
    private String certificateName;

    /**
     * 有无证书：0-无证书，1-有证书
     */
    private Boolean certificateFlag;
    /**
     * 培训地点
     */
    private String trainSite;
    /**
     * 培训人（讲师）用户Id
     */
    private Long trainerUserId;
    /**
     * 第一次审核人用户Id
     */
    private Long auditUserId;
    /**
     * 第一次审核人名
     */
    private String auditUserName;
    /**
     * 培训人（讲师）用户姓名
     */
    private String trainerUserName;
    /**
     * 培训开始时间
     */
    private LocalDateTime startTime;
    /**
     * 培训结束时间
     */
    private LocalDateTime endTime;
    /**
     * 状态：0-时间未到，1-已完成，2-未完成
     */
    private Integer status;
    /**
     * 租户Id，0表示不指定
     */
    private Long tenantId;
    /**
     * 创建人Id
     */
    private Long createUserId;
    /**
     * 创建人Id
     */
    private String createUserName;
    /**
     * 创建时间
     */
    private LocalDateTime createTime;
    /**
     * 更新时间
     */
    private LocalDateTime updateTime;
    /**
     * 更新时间(几分钟前)
     */
    private String accessTimeString;
    /**
     * 删除标识：0-正常，1-删除
     */
    private Boolean deleteFlag;

    /**
     * 参与考试人id
     */
    private List<Long> participateUserId;
    /**
     * 参与考试部门id
     */
    private List<Long> participateGroupId;
    /**
     * 处理人Id
     */
    private Long handleUserId;
    /**
     * 申请原因
     */
    private String reason;
    /**
     * 阶段：0-未定义
     */
    private String phase;
    /**
     * 阶段：0-未定义
     */
    private String phaseName;
    /**
     * 阶段：0-未定义
     */
    private Integer phaseNum;
    /**
     * 是否发起过考核
     */
    private Boolean examinationFlag;
    /**
     * 文档id
     */
    private List<Long> documentIds;

    private List<TrainDocumentRelBO> trainDocumentRelBOS;

    private List<TrainUserBO> trainUserBOS;

    private List<TrainUserGroupBO> trainUserGroupBOS;
    /**
     * 当前用户实操记录
     */
    private List<PracticeRecordBO> practiceRecordList;

    /**
     * 处理列表
     */
    private List<TrainFlowHandleBO> trainFlowHandleList;


    /// methods

    public void addHandle(TrainFlowHandleBO trainFlowHandleBO) {
        Objects.requireNonNull(trainFlowHandleBO);
        if (trainFlowHandleList == null) {
            trainFlowHandleList = new ArrayList<>();
        }
        trainFlowHandleList.add(trainFlowHandleBO);
    }

}
